package com.controller;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.swing.JTable;
import javax.swing.JTextField;

import com.gui.login.LoginAll;
import com.tool.DatabaseTool;

public class AdminCon {
	// 书库存总数
	private static int count = 0;
	// 图书和公告插入返回的作用次数
	private static int res = 0;
	private static int res2 = 0;
	// sql语句
	private static String sql;
	private static String all = "";
	// 分隔符
	private static final String SPLIT_WORD = ",";
	//下面是方法
	/**
	 * 查询功能
	 * 
	 * @param map
	 *            用于存放判断的表达式，Key为字段 Value为条件
	 * @return 返回形成的表
	 */
	public static JTable select(Map<String, String> map) {
		Set<Map.Entry<String, String>> set = map.entrySet();
		Iterator<Map.Entry<String, String>> it = set.iterator();
		while (it.hasNext()) {
			Map.Entry<String, String> mt = it.next();
			if (!it.hasNext()) {
				// 如果是数量和价格字段，则不加单引号
				if (mt.getKey().equals("b_num") || mt.getKey().equals("b_price")) {
					all += mt.getKey() + "=" + mt.getValue();
				} else {
					all += mt.getKey() + "='" + mt.getValue() + "'";
				}
			} else {
				// 如果是数量和价格字段，则不加单引号
				if (mt.getKey().equals("b_num") || mt.getKey().equals("b_price")) {
					all += mt.getKey() + "=" + mt.getValue() + " and ";
				} else {
					all += mt.getKey() + "='" + mt.getValue() + "' and ";
				}
			}

		}
		if (map.isEmpty()) {
			sql = "select * from book;";
		} else {
			sql = "select * from book where " + all + ";";
		}
		List<String> list = DatabaseTool.doQuery(sql);
		Object obj[][] = new Object[list.size()][];
		// 获取表头
		Object os[] = new Object[] { "书籍编号", "书名", "种类", "价格", "数量", "出版社", "入库时间" };
		// 如果list为空则不执行操作
		if (list != null) {
			for (int i = 0; i < list.size(); i++) {
				// 获取其中的字段
				Object[] objs = list.get(i).split(SPLIT_WORD);
				obj[i] = objs;
			}
		}
		JTable jtab = new JTable(obj, os);
		all = "";
		return jtab;
	}

	/**
	 * 图书数据库的插入：由管理员操作
	 * 
	 * @param arr
	 *            获取所有文本框的的数组，里面有：0=图书名称，1=图书类别，2=图书价格，图书数量（所有的书本数量固定1），3=出版社，4=入库时间
	 * @param num
	 *            插入了多少本书，根据数量来写插入语句的数量
	 * @param jtf1
	 *            图书编号的文本框
	 */
	public static String insert(String[] arr, int num, JTextField jtf1) {
		// 获取文本框1：编号框的值
		String getjtf1 = jtf1.getText();
		//判断文本框的内容是不是空的，如果是空，则添加的时候，语句为Null，如果不为空，则添加的时候语句加上单引号
		for (int i = 0; i < arr.length; i++) {
			if ("".equals(arr[i]) || arr[i] == null) {
				arr[i] = null;
			}else {
				arr[i] = "'" + arr[i] + "'";
			}
		}
		for (int j = count + 1; j <= count + num; j++) {
		// 循环输出添加的书的数量
			// 如果是个位数，那么前面加000
			if (0 <= j && j < 10) {
				jtf1.setText(getjtf1 + "000" + j);
			}
			// 如果是十位数，那么前面加00
			else if (10 <= j && j < 100) {
				jtf1.setText(getjtf1 + "00" + j);

			}
			// 如果是百位数，那么前面加0
			else if (100 <= j && j < 1000) {
				jtf1.setText(getjtf1 + "0" + j);

			}
			// 否则直接输出
			else {
				jtf1.setText(getjtf1 + j);
			}
			// SQL语句
			String sql = "insert into book values('" + jtf1.getText() + "'," + arr[0] + "," + arr[1] + "," + arr[2]
					+ "," + 1 + "," + arr[3] + "," + arr[4] + ");";
			// 调用数据库工具类，返回结果并输出
			res = DatabaseTool.doInsert(sql);
		}
		count += num;
		// 公告栏更新公告语句
		String nowDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
		String newbook = "'更新了" + num + "本" + arr[0].replaceAll("'", "") + "书'";
		String sql2 = "insert into info(i_title,i_content,i_date,a_name) values('新增图书'," + newbook + ",'" + nowDate + "','" + LoginAll.getUser() + "');";
		
		// 调用数据库工具类，返回结果并输出
		res2 = DatabaseTool.doInsert(sql2);
		return "book表 " + res + " 条受到了影响\n" + "info表 " + res2 + " 条收到了影响";
	}
}
